package com.autoerp.dao.jdbc.servico;

import java.sql.Connection;
import java.util.List;

import org.mentabean.BeanSession;

import com.autoerp.dao.servico.PecaDAO;
import com.autoerp.model.servico.PecaEntity;

/**
 * 
 * Classe PecaDAOJdbc, implementação da interface PecaDAO.
 */
public class PecaDAOJdbc implements PecaDAO {

	/** The session. */
	private BeanSession session;

	/** The conn. */
	private Connection conn;

	/**
	 * Instantiates a new peça dao jdbc.
	 * 
	 * @param session
	 *            the session
	 */
	public PecaDAOJdbc(BeanSession session) {
		this.session = session;
		this.conn = session.getConnection();

	}

	/**
	 * Excluir a peça atraves do seu identificador.
	 * 
	 * @param id_peca
	 *            identificador da peça
	 */
	public void deletar(Integer id_peca) {
		// Cria instancia da peça
		PecaEntity peca = new PecaEntity();
		// Seta identificador da peça
		peca.setId_peca(id_peca);

		// Busca e exclui a peça
		if (session.load(peca)) {
			session.delete(peca);
		} else {
			throw new IllegalStateException("Peça não encontrada!");
		}

	}

	/**
	 * Localizar a peça atraves do seu identificador.
	 * 
	 * @param id_peca
	 *            identificador da peça
	 * @return instancia da peça
	 */
	public PecaEntity buscarPorId(Integer id_peca) {
		// Cria instancia da peça
		PecaEntity peca = new PecaEntity();
		// Seta identificador da peça
		peca.setId_peca(id_peca);

		// Busca e retorna a peça
		if (session.load(peca)) {
			return peca;
		}

		// Retorna null se a peça não for encontrada
		return null;
	}

	/**
	 * Localizar a peça atraves do seu nome.
	 * 
	 * @param de_nome
	 *            Nome da peça
	 * @return instancia da peça
	 */
	public PecaEntity buscarPorNome(String de_nome) {
		// Cria instancia da peça
		PecaEntity peca = new PecaEntity();
		// Seta nome da peça
		peca.setDe_nome(de_nome);

		List<PecaEntity> list = buscarPeca(peca);

		// Se a lista de peças for null ou vazia retorna null
		if (list == null || list.isEmpty()) {

			return null;

		} else if (list.size() > 1) {
			// Se a lista de peças for maior que 1 seta mensagem
			throw new IllegalStateException(
					"Existe mais de uma peça com o mesmo nome!");

		} else {
			// Retorna a peça da posicao 0 da lista
			return list.get(0);
		}
	}

	/**
	 * Localizar peça.
	 * 
	 * @param peca
	 *            instancia da peça
	 * @return Lista de peça
	 */
	public List<PecaEntity> buscarPeca(PecaEntity peca) {
		// / Retorna lista de peças encontrados.
		return session.loadList(peca);
	}

	/**
	 * Localizar Lista de peças.
	 * 
	 * @return Lista de peças
	 */
	public List<PecaEntity> buscarListaPecas() {
		// Cria instancia de peça
	  PecaEntity peca = new PecaEntity();
		// Retorna lista de peças.
		return session.loadList(peca);

	}

	/**
	 * Salvar a peça no banco de dados.
	 * 
	 * @param pecaEntity
	 *            the peca entity
	 */
	public void salvar(PecaEntity pecaEntity) {
		// Salva peça no banco
		session.insert(pecaEntity);

	}

}
